# 抖码算法，让算法学习变得简单有趣
# 作者：老汤
from functools import cmp_to_key

s = str(input())
# 统计每个字符出现的次数
count_map = {}
for i in range(len(s)):
    c = s[i]
    if c in count_map:
        count_map[c] += 1
    else:
        count_map[c] = 1

# 将 Map 转成 List
entry_list = list()
for key in count_map:
    entry_list.append([key, count_map[key]])


def _sort(a, b):
    a_char, a_char_cnt = str(a[0]), a[1]
    b_char, b_char_cnt = str(b[0]), b[1]
    # 按照字母出现次数降序排列
    if a_char_cnt != b_char_cnt:
        return b_char_cnt - a_char_cnt
    # 如果字母出现次数相等的话，则按照字母规则来排序
    # ① 保证小写字母在前面，大写字母在后面
    if b_char.islower() and a_char.isupper():
        return 1
    if a_char.islower() and b_char.isupper():
        return -1
    # ② 如果字母都是小写，还是大写，按照字母顺序排序
    return ord(a_char) - ord(b_char)


entry_list.sort(key=cmp_to_key(_sort))

res = ""
for i in range(len(entry_list)):
    res += entry_list[i][0] + ":"
    res += str(entry_list[i][1]) + ";";

print(res)